package com.test.practice.genericity.custom;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义泛型类
 *
 * @Description: 自定义泛型类
 * =======================
 * @Author: Jovi
 * =======================
 * @Date: Created in 2023-02-09
 * =======================
 * @Version: 1.1.2.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Customer<T> {

    String name;

    int age;

    T customT;


    /**
     * 静态方法中不能使用泛型
     */
//    public static void test(E a) {
//        System.out.println(customT);
//    }


    public void test() {
        //error
//        T[] arr = new T[10];

        //right
        T[] arr = (T[]) new Object[10];
    }


    /**
     * 泛型方法
     * @param arr
     * @param <E>
     * @return
     */
    public <E> List<E> copyFromArrayList(E[] arr) {
        ArrayList<E> list = new ArrayList<>();
        for (E e : arr) {
            list.add(e);
        }
        return list;
    }

    /**
     * 静态泛型方法
     * @param arr
     * @param <E>
     * @return
     */
    public static <E> List<E> staticCopyFromArrayList(E[] arr) {
        ArrayList<E> list = new ArrayList<>();
        for (E e : arr) {
            list.add(e);
        }
        return list;
    }

}
